From 57045014253643f4afd35c322a146ee1d1517a46 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Thu, 15 Dec 2016 21:01:45 +0100 Subject: [PATCH] cairo: add fast paths for u8 and u16 gray gamma --- extensions/cairo.c | 43 +++++++++++++++++++++++++++++++++++++++++++ tools/babl-verify.sh | 4 ---- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/extensions/cairo.c b/extensions/cairo.c index a8247f6..2d807cb 100644 --- a/extensions/cairo.c +++ b/extensions/cairo.c @@ -125,6 +125,9 @@ conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) return samples; } + + + static inline long conv_yA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) { @@ -163,6 +166,40 @@ conv_yA16_cairo32_le (unsigned char *src, unsigned char *dst, long samples) return samples; } +static inline long +conv_y8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { + unsigned char val = *src++; + *dst++ = val; + *dst++ = val; + *dst++ = val; + *dst++ = 0xff; + } + return samples; +} + +static inline long +conv_y16_cairo32_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + uint16_t *s16 = (void*)src; + while (n--) + { +#define div_257(a) ((((a)+128)-(((a)+128)>>8))>>8) + uint16_t v16 = *s16++; + unsigned char val = div_257(v16); +#undef dib_257 + *dst++ = val; + *dst++ = val; + *dst++ = val; + *dst++ = 0xff; + } + return samples; +} + static long conv_rgbA_gamma_float_cairo32_le (unsigned char *src, unsigned char *dst, @@ -273,6 +310,12 @@ init (void) babl_conversion_new (babl_format ("Y'A u16"), f32, "linear", conv_yA16_cairo32_le, NULL); + + babl_conversion_new (babl_format ("Y' u8"), f32, "linear", + conv_y8_cairo32_le, NULL); + babl_conversion_new (babl_format ("Y' u16"), f32, "linear", + conv_y16_cairo32_le, NULL); + babl_conversion_new (babl_format ("RGBA float"), f32, "linear", conv_rgbafloat_cairo32_le, NULL); diff --git a/tools/babl-verify.sh b/tools/babl-verify.sh index bde6aa0..5d917bb 100755 --- a/tools/babl-verify.sh +++ b/tools/babl-verify.sh @@ -28,8 +28,6 @@ $base_path/tools/babl-verify "$format" "RGBA float" "x" $base_path/tools/babl-verify "RGBA float" "$format" "x" $base_path/tools/babl-verify "$format" "R'G'B'A float" "x" $base_path/tools/babl-verify "R'G'B'A float" "$format" "x" -$base_path/tools/babl-verify "$format" "CIE Lab float" "x" -$base_path/tools/babl-verify "CIE Lab float" "$format" "x" $base_path/tools/babl-verify "$format" "cairo-ARGB32" $base_path/tools/babl-verify "$format" "RaGaBaA float" @@ -38,6 +36,4 @@ $base_path/tools/babl-verify "$format" "RGBA float" $base_path/tools/babl-verify "RGBA float" "$format" $base_path/tools/babl-verify "$format" "R'G'B'A float" $base_path/tools/babl-verify "R'G'B'A float" "$format" -$base_path/tools/babl-verify "$format" "CIE Lab float" -$base_path/tools/babl-verify "CIE Lab float" "$format" -- 2.30.2